SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spConciliacionAutomatica] 
@Fecha Varchar(10),
@Tabla Varchar(50)
AS

Set Dateformat DMY

Declare @FFecha Datetime
Declare @Query Varchar(2000)
Declare @SinConciliarPorUbicacion Int, @SinConciliarPorSituacionDeRevista Int, @SinConciliarPorCargoSalarial Int
Declare @TotalLegajosCESIDA Int, @TotalServiciosEDU Int, @TotalServiciosConciliados Int, @TotalLegajosConciliados Int 
Declare @ErrorC Int

If @Fecha = '-1'
	Select @FFecha = Getdate()
Else
	Select @FFecha = Convert(Datetime, @Fecha)

Select  @ErrorC = 0

Begin Transaction

If Exists (Select * From Sysobjects Where name = 'vw_CesidaConciliacionAutomatica')
	Drop View vw_CesidaConciliacionAutomatica

Select @Query = 'CREATE VIEW vw_CesidaConciliacionAutomatica AS ' + Char(10)
Select @Query = @Query + ' SELECT * FROM ' + @Tabla

Print @Query

Exec(@Query)
Select @ErrorC = @@Error
If @ErrorC <> 0
	Goto SALIR

Update C Set C.idAgente = A.idAgente From CESIDA05 C, tb_Agentes A Where A.documento = C.nro_doc
Update C Set C.idOrganizacion = O.idOrganizaciones From CESIDA05 C, tb_Organizaciones O Where O.Cuise = C.Ubicacion
Update C Set C.RegimenSalarial = CA.REgimenSalarial From CESIDA05 C, tb_Cargos CA Where C.Cargo = CA.idCargo

Delete From LegajosSalariales

Select @ErrorC = @@Error
If @ErrorC <> 0
	Goto SALIR

Insert LegajosSalariales
Select idServicioAgente, Documento, O.Cuise, CargoSalarial, Null, S.Horas, Agente, C.RegimenSalarial, idOrganizaciones, SituacionRevista
From tb_ServiciosAgentes S Inner Join tb_Organizaciones O On UbicacionOrig = idOrganizaciones
Inner Join tb_Agentes On idAgente = Agente 
Inner Join tb_Cargos C On idCargo = CargoSalarial
Inner Join tb_SubServiciosAgentes SS On idServicioAgente = ServicioAgente
Inner Join tb_Plazas P On idPlaza = Plaza
Where S.FechaBaja Is Null 
And S.FechaAlta < @FFecha 
And SituacionRevista In (1,2) 
And TipoDeServicio = 1
And UbicacionOrig Not in (Select idOrganizaciones From tb_Organizaciones Where EsPrivada = 'S')
And ServicioLigado Is Null
And SS.FechaBaja Is Null 
And P.Paquete Is Null


Select @ErrorC = @@Error
If @ErrorC <> 0
	Goto SALIR

/********************** PARA ASIGNAR LEGAJO SALARIAL A CARGOS *****************************/
Update L Set LegajoSalarial = Legajo
From LegajosSalariales L, vw_CesidaConciliacionAutomatica C
Where C.idagente = L.idAgente And C.idOrganizacion = L.idOrganizacion
And L.RegimenSalarial = 12
And C.Cargo = L.CargoSalarial
And Case Revista When 'P' Then 1 Else 2 End = SituacionRevista 
Select @ErrorC = @@Error
If @ErrorC <> 0
	Goto SALIR

/********************** PARA ASIGNAR LEGAJO SALARIAL A HORAS *****************************/
Create Table #ServiciosAPonerLegajo (Servicio Int)
Select @ErrorC = @@Error
If @ErrorC <> 0	Goto SALIR
Create Table #ServiciosAgentes (idServicioAgente Int, Horas Int, UbicacionOrig Int, CargoSalarial Int, Agente Int)
Select @ErrorC = @@Error
If @ErrorC <> 0	Goto SALIR

Insert #ServiciosAgentes
	Select idServicioAgente, S.Horas, UbicacionOrig, CargoSalarial, Agente
	From tb_ServiciosAgentes S Inner Join tb_Cargos C On idCargo = CargoSalarial
	Inner Join tb_SubServiciosAgentes SS On idServicioagente = ServicioAgente
	Inner Join tb_Plazas P On IdPlaza = Plaza
	Where S.FechaBaja Is Null 
	And S.FechaAlta <= @FFecha
	And SituacionRevista In (1,2) 
	And C.RegimenSalarial = 13 
	And UbicacionOrig Not In (Select idOrganizaciones From tb_Organizaciones Where EsPrivada = 'S')
	And SS.FechaBaja Is Null
	And Paquete Is Null
	And ServicioLigado Is Null

Select @ErrorC = @@Error
If @ErrorC <> 0	Goto SALIR

Declare @Cargo Int, @idOrganizacion Int, @HorasCesida Int, @idAgente Int, @Legajo Int

Declare Legajos Cursor For
Select Cargo, idOrganizacion, Horas_Cat, idAgente, Legajo From vw_CesidaConciliacionAutomatica Where Horas_Cat <> 0.0

Open Legajos

Fetch Next From Legajos Into @Cargo, @idOrganizacion, @HorasCesida, @idAgente, @Legajo

While @@Fetch_Status = 0 And @ErrorC = 0
Begin
	Delete From #ServiciosAPonerLegajo
	--Select @ErrorC = @@Error
	--If @ErrorC <> 0	--	BREAK

	Declare @idServicioAgente Int, @HorasServicio Int, @Horas Int

	Select @Horas = 0, @HorasServicio = 0
	
	Declare Servicios Cursor Static For
	Select idServicioAgente, Horas From #ServiciosAgentes Where Agente = @idAgente And CargoSalarial = @Cargo
		And UbicacionOrig = @idOrganizacion 
	Order By Horas DESC

	Open Servicios

	Fetch Next From Servicios Into @idServicioAgente, @HorasServicio

	While @@Fetch_Status = 0 And @ErrorC = 0
	Begin
		If @HorasCesida >= (@HorasServicio + @Horas)
		Begin
			Insert #ServiciosAPonerLegajo Select @idServicioAgente
			--Select @ErrorC = @@Error
			--If @ErrorC <> 0			--	BREAK

			Select @Horas = @Horas + @HorasServicio 
			Delete From #ServiciosAgentes Where idServicioAgente = @idServicioAgente
			Select @ErrorC = @@Error
			If @ErrorC <> 0				BREAK

		End	
		Fetch Next From Servicios Into @idServicioAgente, @HorasServicio
	End

	If @ErrorC <> 0
		BREAK

	--Print 'Horas CESIDA: ' + Convert(Varchar, @HorasCesida) + ' Horas EDU: ' + Convert(Varchar, @Horas)

	If @HorasCesida = @Horas
	Begin
		--Print 'Tiene que Actualizar'
		Update L Set LegajoSalarial = @Legajo
		From LegajosSalariales L Inner Join #ServiciosAPonerLegajo On Servicio = idServicioAgente
		Select @ErrorC = @@Error
		If @ErrorC <> 0			BREAK	
	End

	Close Servicios
	Deallocate Servicios

	Fetch Next From Legajos Into @Cargo, @idOrganizacion, @HorasCesida, @idAgente, @Legajo
End

Drop Table #ServiciosAPonerLegajo
Drop Table #ServiciosAgentes

If @ErrorC = 0
Begin

	--Drop Table #ServiciosAgentes
	--Drop Table #ServiciosAPonerLegajo

	-- Servicios sin Conciliar por diferencia de ubicacion
	
/*	Select @SinConciliarPorUbicacion = Count(*) 
	From vw_CesidaConciliacionAutomatica C, tb_Agentes A, tb_ServiciosAgentes S, tb_Organizaciones O, tb_Cargos Car
	Where Convert(Int, Nro_Doc) = Documento 
	And A.idAgente = Agente
	And UbicacionOrig = idOrganizaciones 
	And Cuise <> Convert(Int, Ubicacion)
	And Convert(Int, C.Cargo) = CargoSalarial
	And Case Revista When 'P' Then 1 Else 2 End = SituacionRevista
	And Car.idCargo = S.CargoSalarial
	And ((Car.RegimenSalarial = 13 And Horas_Cat = S.Horas) Or (Car.RegimenSalarial = 12))
	And S.FechaBaja Is Null And (S.FechaAlta < @FFecha) And idServicioAgente Not In (Select idServicioAgente From LegajosSalariales Where LegajoSalarial Is Not Null)
	And UbicacionOrig Not In (Select idOrganizaciones From tb_Organizaciones Where EsPrivada = 'S')

	-- Servicios sin conciliar por Situacion de Revista
	Select @SinConciliarPorSituacionDeRevista = Count(*)
	From vw_CesidaConciliacionAutomatica C, tb_Agentes A, tb_ServiciosAgentes S, tb_Organizaciones O, tb_Cargos Car
	Where Convert(Int, Nro_Doc) = Documento 
	And A.idAgente = Agente
	And UbicacionOrig = idOrganizaciones 
	And Cuise = Convert(Int, Ubicacion)
	And Convert(Int, C.Cargo) = CargoSalarial
	And Case Revista When 'P' Then 1 Else 2 End <> SituacionRevista
	And Car.idCargo = S.CargoSalarial
	And ((Car.RegimenSalarial = 13 And Horas_Cat = S.Horas) Or (Car.RegimenSalarial = 12))
	And S.FechaBaja Is Null And (S.FechaAlta <@FFecha) And idServicioAgente Not In (Select idServicioAgente From LegajosSalariales Where LegajoSalarial Is Not Null)

	-- Servicios sin conciliar por Cargo Salarial
	Select @SinConciliarPorCargoSalarial = Count(*)
	From vw_CesidaConciliacionAutomatica C, tb_Agentes A, tb_ServiciosAgentes S, tb_Organizaciones O, tb_Cargos Car
	Where Convert(Int, Nro_Doc) = Documento 
	And A.idAgente = Agente
	And UbicacionOrig = idOrganizaciones 
	And Cuise = Convert(Int, Ubicacion)
	And Convert(Int, C.Cargo) <> CargoSalarial
	And Case Revista When 'P' Then 1 Else 2 End = SituacionRevista	
	And Car.idCargo = S.CargoSalarial
	And ((Car.RegimenSalarial = 13 And Horas_Cat = S.Horas) Or (Car.RegimenSalarial = 12))
	And S.FechaBaja Is Null And (S.FechaAlta < @FFecha) And idServicioAgente Not In (Select idServicioAgente From LegajosSalariales Where LegajoSalarial Is Not Null)
*/


	-- Totales de Legajos a Conciliar
	Select @TotalLegajosCESIDA = Count(*) From vw_CesidaConciliacionAutomatica

	-- Totales de Servicios a Conciliar
	Select @TotalServiciosEDU = Count(*) From LegajosSalariales

	-- Totales de Legajos Conciliados
	Select @TotalLegajosConciliados = Count(Distinct LegajoSalarial) From LegajosSalariales Where LegajoSalarial Is Not Null

	-- Totales de Servicios Conciliados
	Select @TotalServiciosConciliados = Count(*) From LegajosSalariales Where LegajoSalarial Is Not Null

End
SALIR:
If @ErrorC = 0
Begin
	Commit Transaction
	Select 	--@SinConciliarPorUbicacion SinConciliarPorUbicacion, 
		--@SinConciliarPorSituacionDeRevista SinConciliarPorSituacionDeRevista, 
		--@SinConciliarPorCargoSalarial SinConciliarPorCargoSalarial, 
		@TotalLegajosCESIDA TotalLegajosCESIDA, 
		@TotalServiciosEDU TotalServiciosEDU,
		@TotalLegajosConciliados TotalLegajosConciliados, 
		@TotalServiciosConciliados TotalServiciosConciliados,
		 'OK' Error
End
Else
Begin
	Rollback Transaction
	Select Convert(Varchar, @ErrorC) Error
End

GO
GRANT EXECUTE ON  [dbo].[spConciliacionAutomatica] TO [Liquidaciones]
GO
